#include <iostream>
#include <queue>
#include <map>
#include <unordered_map>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <set>
#include <unordered_set>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const int INF=0x3f3f3f3f;
const int N=1e5+10;
ll sum;
priority_queue<pii> q;
int e[2*N],ne[2*N],h[N],idx;
int st[N];
int p[N];
void add(int a,int b)
{   
	e[idx]=b;
	ne[idx]=h[a];
	h[a]=idx;
	idx++;
}
int main()
{
	int n;
	while(cin>>n)
	{
		idx=0;
		memset(h,-1,sizeof(h));
		sum=0;
		int num=0;
		for(int i=1;i<=n;i++)
		{
			scanf("%d",p+i);
			q.push({p[i],i});
		}
		 
		for(int i=1;i<n;i++)
		{
			int a,b;
			scanf("%d %d",&a,&b);
			add(a,b);
			add(b,a);
		}
		while(!q.empty())
		{
			int a=q.top().second;
			st[a]=1; 
			q.pop();
			for(int i=h[a];i!=-1;i=ne[i])
			{
				int j=e[i];
				if(st[j]==0)
				{
					sum+=p[j];
	
				 } 
			 } 
			
		}
		memset(st,0,sizeof(st));
		cout<<sum<<endl;
		
	}

	return 0;
}

